/**
 * ZHU framework. Copyright 2012-, all rights reserved.
 *
 * $Id$
 * $Revision$
 * $Date$
 * $Author$
 */
package zhu.framework.service;

import java.util.*;

import javax.ejb.*;

/**
 * <p>
 * </p>
 * 
 * @author $Author$
 * @version $Revision$ - $Date$
 */
@ApplicationException(rollback = true)
public class BusinessException extends RuntimeException {

	/**
	 * <h3>スレッドセーフ性</h3>
	 * <p>
	 * この変数は<code>this</code>によってGuardされる。 この変数は<code>final</code>
	 * であり、参照先がスレッドセーフであるため、スレッドセーフ性を破ることはない。
	 * この変数の参照先はスレッドセーフ<strong>ではない</strong>。
	 * </p>
	 */
	private static final long serialVersionUID = 1L;

	private final List<BusinessServiceMessage> messages = new ArrayList<>();

	public BusinessException() {
		super();
		messages.add(new BusinessServiceMessage(null));
	}

	public BusinessException(final String message) {
		super(message);
		messages.add(new BusinessServiceMessage(message));
	}

	public BusinessException(final Throwable cause) {
		super(cause);
		messages.add(new BusinessServiceMessage(cause.getMessage()));
	}

	public BusinessException(final BusinessServiceMessage serviceMessage) {
		messages.add(serviceMessage);
	}

	public BusinessException(final List<BusinessServiceMessage> serviceMessages) {
		messages.addAll(serviceMessages);
	}

	/**
	 * <p>
	 * プロパティ<code>messages</code>の値を取得する。
	 * </p>
	 * 
	 * @return プロパティ<code>messages</code>の値
	 */
	public List<BusinessServiceMessage> getMessages() {
		return messages;
	}

}
